package com.fdb.efp.cus.service.dao;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.fdb.efp.cus.service.domain.CusIndiv;
import org.apache.ibatis.annotations.Param;

import com.fdb.basic.framework.core.base.DataOptionalAuthorityDao;
import com.fdb.efp.cus.service.vo.CusIndivVO;
/**
 * <p>DAO interface:个人客户信息表				<p>
 * @author chenqm1 数据库连接对象
 * @date 2018-05-04
 */
public interface CusIndivDao extends DataOptionalAuthorityDao{

	public int insertCusIndiv(CusIndiv cusIndiv);

	public int deleteByPk(CusIndiv cusIndiv);

	public int updateByPk(CusIndiv cusIndiv);

	public CusIndiv queryByPk(CusIndiv cusIndiv);

	public List<CusIndiv> queryAllOwnerByPage(CusIndiv cusIndiv);

	public List<CusIndiv> queryAllCurrOrgByPage(CusIndiv cusIndiv);

	public List<CusIndiv> queryAllCurrDownOrgByPage(CusIndiv cusIndiv);
	public List<CusIndiv> queryCusByCusManager(CusIndiv cusIndiv);
	/**
	 * 分批查询客户信息，供批次生成文件
	 * @param start 数据开始
	 * @param end 数据结束
	 * @return List<CusIndiv>
	 */
	public List<CusIndiv> queryAllCusInTurn(int start,int batchNum);
	/**
	 * 获取表数据总数
	 * @return
	 */
	public int queryCusCount(CusIndiv cusIndiv);

	public List<CusIndiv> queryCustListToODS();


	/**
	 * 根据条件获取表数据总数
	 * @return
	 */
	public int queryCusCountByCond(CusIndiv cusIndiv);

	/**
	 * 根据条件获取表数据
	 * @return
	 */
	public List<CusIndiv> queryListByCondAndLimit(Map<String,Object> map);
	public int cusInfoCusHandOver(@Param("fromUser") String fromUser, @Param("toUser") String toUser,
								  @Param("fromBrId") String fromBrId, @Param("toBrId") String toBrId,
								  @Param("cusIds") List<String> cusIds, @Param("legalOrgCode")  String legalOrgCode,
								  @Param("legalOrgName") String legalOrgName);
	/**
	 * 查询客户经理下的 客户信息
	 * 不包含正在进行客户移交中的客户
	 * @param cusIndivVO
	 * @return
	 */
	public List<CusIndiv> queryCusIndivByCusManByPage(CusIndivVO cusIndivVO);
	/**
	 * 查询客户经理某个区域编码下所有的客户信息
	 * @param cusIndivVO
	 * @return
	 */
	public List<CusIndiv> queryCusByCusManagerArea(CusIndivVO cusIndivVO);
	/**
	 * 查询客户经理 在移交日期范围内接收到的客户信息
	 * @param cusManager 客户经理号
	 * @param handoverStartDate 移交范围开始日期
	 * @param handoverEndDate 移交范围结束日期
	 * @return
	 */
	public List<CusIndiv> queryCusByHandoverHis(@Param("cusManager")String cusManager,
												@Param("handoverStartDate")String handoverStartDate,
												@Param("handoverEndDate")String handoverEndDate);
	/**
	 * 查询客户经理下未开始移交的所有客户
	 * @param cusIndivVO
	 * @return
	 */
	public List<CusIndiv> queryCusAllByCusManager(CusIndivVO cusIndivVO);

	/**
	 * 获取客户的信用等级
	 * @param cusIds
	 * @return
	 */
	public List<CusIndiv> getCusCrdGradeByCusIds(@Param("cusIds") List<String> cusIds);

	/**
	 * 根据身份证号获取客户号
	 */
	public String getCusIdByCertCode(@Param("certType") String certType
			, @Param("certCode") String certCode);
	List<CusIndiv> getCusIndivListByIdTypeAndIdNo(CusIndiv cusIndivByNo);

	/**
	 *
	 * 同步客户信息有数据则更新，无则新增 <br>
	 * 0.1:ludayong:2019年5月11日 下午5:46:57:新增 <br>
	 * @author ludayong
	 * @since 2019年5月11日 下午5:46:57
	 * @date 2019年5月11日 下午5:46:57
	 * @version 0.1
	 */
	public int insertOrUpdateCusIndiv(List<CusIndiv> updateList);

	/**
	 * 通过证件类型、证件号码查询客户信息
	 * @author  qiuyf
	 * @since 2019年5月24日 下午7:59:38
	 * @date 2019年5月24日 下午7:59:38
	 * @version 0.1 初始为0.1,后续变更则修改
	 */
	public CusIndiv queryByCust(CusIndiv cusIndiv);
	/**
	 *
	 * TODO <br>
	 * 0.1:wanglihua:2019年4月19日 下午5:52:08:TODO <br>
	 * @author wanglihua
	 * @since 2019年4月19日 下午5:52:08
	 * @date 2019年4月19日 下午5:52:08
	 * @version 0.1 初始为0.1,后续变更则修改
	 */
	public CusIndiv queryContractEle(CusIndiv cusIndiv);

	public List<CusIndiv> queryExAllOwner(CusIndiv cusIndiv);

	public CusIndiv queryByCondition(CusIndiv cusIndiv);

	public List<CusIndiv> getDatasVyCusId(@Param("cusIdList") List<String> cusIdList);

	public int countCusIfosByCon(CusIndivVO cusIndivVO);

	int updateAxqUserId(@Param("axqUserId") String axqUserId, @Param("cusId") String cusId);

	int updateAnnual(@Param("perAnnualIncome") BigDecimal perAnnualIncome, @Param("famAnnualIncome") BigDecimal famAnnualIncome, @Param("cusId") String cusId);

	public int queryCusCountByFstChannel(CusIndiv cusIndiv);

	public List<CusIndiv> queryCusCountByFstChannelByPage(CusIndiv cusIndiv);
}